package gui;
import logica.*;
import java.awt.*;
import java.util.ArrayList;

import javax.swing.JComponent;
/**
**********************************************************************************************<br/>
* Es el componente que permite que la interfaz agradablemente muestre los nodos y permita arrastrarlos
* @author Jefferson Amado Pe&ntilde;a Torres
**********************************************************************************************
* @see logica.Asociacion
* @see Tablero
* @see java.awt.Graphics2D
* @see JComponent
* @version 0.1
*/
public class Tablero extends JComponent{
	private ArrayList<VerticeGrafico> puntos;
	private ArrayList<AsociacionGrafica> aristas;
	private ArrayList<AsociacionGrafica> neo;
	private Point a, b;
	public boolean estado = false;
	public boolean punto = false;
	/**
	*Contruye un componente sobre el que se puede dibujar
	*/
	public Tablero(){
		aristas = new ArrayList<AsociacionGrafica>();
		puntos = new ArrayList<VerticeGrafico>();
		neo = new ArrayList<AsociacionGrafica>();
	}
	/**
	*permite pintar los elementos al JComponent
	*@param g grficos de JComponent
	*/	
    @Override
	public void paintComponent(Graphics g){
		if (punto){
			g.setColor(Color.BLUE);
			g.drawLine((int) a.getX() + 5, (int) a.getY() + 5, (int) b.getX() + 5, (int) b.getY() + 5);
		}
		for (int i = 0; i < aristas.size(); i++){
			final AsociacionGrafica arista = (AsociacionGrafica) aristas.get(i);
			arista.pintarRecta(g);
		}
		if (estado)
		for (int i = 0; i < neo.size(); i++){
			final AsociacionGrafica arista = (AsociacionGrafica) neo.get(i);
			arista.setColor(Color.RED);
			arista.pintarRecta(g);
		}
		for (int i = 0; i < puntos.size(); i++){
			final VerticeGrafico vertice = (VerticeGrafico) puntos.get(i);
			vertice.pintarVerticeGrafico(g);
		}
	}
	/**
	*Permite cambiar el grafico por otro
	*@param nuevo 
	*/
	public void cambiarGrafo(Grafo nuevo){
		Relacion aux;
		for (int i = 0; i < aristas.size(); i++){
			aux = aristas.get(i).getArista();
			if (nuevo.buscarArista(aux) == true)
				neo.add(aristas.get(i));
		}
		for (int i = 0; i < aristas.size(); i++){
			final Relacion n = aristas.get(i).getArista();
			nuevo.getAristas().add(n);
		}
		estado = true;
		repaint();
	}
	/**
	*Retorna la lista de todos los verticesGraficos de la interfaz
	@return verticesGraficos de la interfaz
	*/
	public ArrayList<VerticeGrafico> getPuntos(){
		return puntos;
	}
	/**
	*Establece la lista de todos los verticesGraficos de la interfaz
	@param puntos verticesGraficos de la interfaz
	*/
	public void setPuntos(final ArrayList<VerticeGrafico> puntos){
		this.puntos = puntos;
	}
	/**
	*Retorna la lista de todos las AsociacionGrafica de la interfaz
	@return AsociacionGrafica de la interfaz
	*/
	public ArrayList<AsociacionGrafica> getAristas(){
		return aristas;
	}
	/**
	*Establece la lista de todos las AsociacionGrafica de la interfaz
	@param aristas AsociacionGrafica de la interfaz
	*/
	public void setAristas(final ArrayList<AsociacionGrafica> aristas){
		this.aristas = aristas;
	}
	/**
	*Retorna la lista de todos las AsociacionGrafica que van a ser puestos despues del algoritmo
	@return AsociacionGrafica que van a ser puestos despues del algoritmo
	*/
	public ArrayList<AsociacionGrafica> getNeo(){
		return neo;
	}
	/**
	*Establece la lista de todos las AsociacionGrafica que van a ser puestos despues del algoritmo
	@param neo AsociacionGrafica que van a ser puestos despues del algoritmo
	*/
	public void setNeo(final ArrayList<AsociacionGrafica> neo){
		this.neo = neo;
	}
	/**
	*Establece un verticeGrafico
	@param a verticeGrafico
	*/
	public void setA(Point a){
		this.a = a;
	}
	/**
	*Establece un verticeGrafico
	*@param b verticeGrafico
	*/
	public void setB(Point b){
		this.b = b;
	}
}
//Jefferson Amado Peña Torres
